
#include <Arduino.h>

#ifndef __USB_HID_H__
#define __USB_HID_H__

#define HID_LED_NUM_LOCK 0x01
#define HID_LED_CAPS_LOCK 0x02
#define HID_LED_SCSROLL_LOCK 0x04
#define HID_LED_COMPOSE_LOCK 0x08
#define HID_LED_KANA_LOCK 0x10

unsigned char REP_TABLE[64]; // 报表映射表，每组2byte [长度(bit)，功能]
unsigned char REP_BUF[16];   // 报表内容

typedef struct
{
    uint8_t LED;               // 0x04: Caps Lock;  0x02: Num Lock;  0x01:Scroll Lock
    uint8_t Enable;            // 0: 停止扫描  1: 使能
    uint16_t KeyRepeat;        // 机打按键 —— 将对此按键进行重复发送
    uint16_t KeyRepeatRateCnt; // 机打频率计数
    uint16_t KeyDelayCnt;      // 机打延时计数
    uint16_t KeyRepeatRate;    // 机打频率 —— 换算成ms计数
    uint16_t KeyDelay;         // 机打延时 —— 换算成ms计数
    uint8_t KeyStatus[120];    // 记录每个按键当前状态 0：释放， 1按下
    uint8_t KeyStatusTmp[120]; // 所有按键的新状态 0：释放， 1按下
    uint8_t Keymode[120];      // 每个按键的发送方法       // 0：默认，0x01:禁止断码, 0x02:禁止机打
} _HID_KB_INFO;

void hid_init(uint8_t *DataBuf, uint8_t nLen);          // 读取报表描述符设置HID设备
void hid_AnalyzeInData(uint8_t *DataBuf, uint8_t nLen); // 解析INDATA

void hid_setup(uint8_t attrib, uint8_t value); // 设置HID设备

#endif